package cn.javabb.core.plugin.thymeleaf.attribute;


import cn.javabb.core.service.biz.NavService;
import org.springframework.context.ApplicationContext;
import org.thymeleaf.context.ITemplateContext;
import org.thymeleaf.engine.AttributeName;
import org.thymeleaf.model.IProcessableElementTag;
import org.thymeleaf.processor.element.AbstractAttributeTagProcessor;
import org.thymeleaf.processor.element.IElementTagStructureHandler;
import org.thymeleaf.spring5.context.SpringContextUtils;
import org.thymeleaf.templatemode.TemplateMode;

/**
 * 方言 官方网站 https://www.thymeleaf.org/doc/tutorials/3.0/extendingthymeleaf.html#element-tag-processors-ielementtagprocessor
 */
public class NavTagProcessor extends AbstractAttributeTagProcessor {

    public static final int PRECEDENCE = 1400;
    // <bb:nav>
    public static final String ATTR_NAME = "navTag";


    /*
    templateMode: 模板模式，这里使用HTML模板。
         dialectPrefix: 标签前缀。即xxx:text中的xxx。在此例子中prefix为thSys。
         elementName：匹配标签元素名。举例来说如果是div，则我们的自定义标签只能用在div标签中。为null能够匹配所有的标签。
         prefixElementName: 标签名是否要求前缀。
         attributeName: 自定义标签属性名。这里为text。
         prefixAttributeName：属性名是否要求前缀，如果为true，Thymeeleaf会要求使用text属性时必须加上前缀，即thSys:text。
         precedence：标签处理的优先级，此处使用和Thymeleaf标准方言相同的优先级。
         removeAttribute：标签处理后是否移除自定义属性。*/
    public NavTagProcessor(final String dialectPrefix) {
        super(
                TemplateMode.HTML,
                dialectPrefix,
                null,
                false,
                ATTR_NAME,
                true,
                PRECEDENCE,
                true);
        }

    @Override
    protected void doProcess(ITemplateContext context, IProcessableElementTag elementTag, AttributeName attributeName,
                             String s, IElementTagStructureHandler structureHandler) {

        /**
         * 获取应用程序上下文,通过application获取Bean
         */
        ApplicationContext appCtx = SpringContextUtils.getApplicationContext(context);
        NavService navService = appCtx.getBean(NavService.class);
        final String typeId= elementTag.getAttributeValue("typeId");
        //List<NavDO> navList = navService.listNavs(Integer.parseInt(typeId));
        //structureHandler.setAttribute("aa","aa");
        //structureHandler.setBody("thymeleaf",false);
        structureHandler.replaceWith("sadfsafsaf",false);
      /*
            这里是获取标签传递的值
      final IEngineConfiguration configuration = context.getConfiguration();
        final IStandardExpressionParser parser = StandardExpressions.getExpressionParser(configuration);
        final IStandardExpression expression = parser.parseExpression(context, s);
        final String title = (String) expression.execute(context);*/
    //structureHandler.setLocalVariable("navList",navList);
        //structureHandler.setAttribute("data-list",navList);
        //structureHandler.setBody("data-list",navList);
    }
}
